Computers use various types of peripheral devices for information storage. One known type of information storage device is a disk drive, in which a rotatable disk has a magnetic surface that is conceptually divided into a plurality of concentric circular tracks. A plurality of blocks of data are stored along each track, and each block of data includes a plurality of sectors. Each sector in each block includes first and second portions. The second portion contains sector-level information that can be used to detect and/or correct errors in information stored in the first portion of that same sector. In most of the sectors, the first portion contains user data. In the remaining sectors, the first portion contains block-level error correction information, which can be used to correct errors found in the user data of other sectors. While devices using this type of block format have been generally adequate for their intended purposes, they have not been satisfactory in all respects.
For example, when a host computer provides the device with some user data which is to be written to a specified block, and which constitutes only a portion of the user data in that block, existing devices typically write all information in the entire block to the disk in order to facilitate generation of the block-level information, which is a function of all of the user data stored in that block. However, writing the entire block to the disk is relatively time consuming, and thus undesirable.
A different consideration is that, when a host requests that specified user data be read from the disk, and when the specified data is only a portion of the user data in a block, existing devices will typically read the entire block from the disk, so that they will be in a position to use the block-level information to attempt to correct any detected errors that cannot be corrected at the sector level. This increases the average time required to read the requested data.
Still another consideration is that, when sectors of a block are being successively read from the disk, and an error is detected in one of the sectors, an attempt to correct the error at the sector level is often still in progress when the next sector becomes available, such that the device is not ready to begin correcting any error which may be present in that next sector. Thus, the device is not capable of correcting errors as fast as the sectors can be read from the disk. As a result, the system occasionally has to discard a sector which it has just read, wait for the disk to carry out a full revolution, and then read the sector again, by which time the correction of the prior sector will have been completed. However, in any situation where an error is detected in a sector, this can greatly increase the amount of time needed to complete the transfer of the requested data to the host.